unit pagoGastoEmpresa;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DB, DBCtrls, DBXpress, DBLocalS,
  RXDBCtrl;

type
  TfrmPagoGastosEmpresa = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    BitBtn2: TBitBtn;
    btnGrabar: TBitBtn;
    sGastoEmpresa: TDataSource;
    Panel21: TPanel;
    Label32: TLabel;
    Label33: TLabel;
    btnCalOpeIni: TSpeedButton;
    btnCalOpeFin: TSpeedButton;
    btnFiltrado: TSpeedButton;
    lblFechaIni: TLabel;
    lblFechaFin: TLabel;
    sPagoGastoEmpresa: TDataSource;
    Panel3: TPanel;
    nvgGasto: TDBNavigator;
    DBText1: TDBText;
    Label3: TLabel;
    Image1: TImage;
    Panel4: TPanel;
    Label58: TLabel;
    edtBuscar: TEdit;
    btnBuscar: TBitBtn;
    btnBorrarBuscar: TSpeedButton;
    grdPagoGastoEmpresa: TRxDBGrid;
    grdGastosEmpresa: TRxDBGrid;
    procedure sGastoEmpresaDataChange(Sender: TObject; Field: TField);
    procedure grdGastosEmpresaEnter(Sender: TObject);
    procedure grdGastosEmpresaExit(Sender: TObject);
    procedure btnGrabarClick(Sender: TObject);
    procedure sGastoEmpresaStateChange(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure grdPagoGastoEmpresaEditButtonClick(Sender: TObject);
    procedure btnCalOpeIniClick(Sender: TObject);
    procedure btnCalOpeFinClick(Sender: TObject);
    procedure btnFiltradoClick(Sender: TObject);
    procedure nvgGastoClick(Sender: TObject; Button: TNavigateBtn);
    procedure Image1Click(Sender: TObject);
    procedure grdGastosEmpresaKeyPress(Sender: TObject; var Key: Char);
    procedure edtBuscarChange(Sender: TObject);
    procedure btnBorrarBuscarClick(Sender: TObject);
    procedure btnBuscarClick(Sender: TObject);
  private
    cds : TSQLClientDataSet;
    tipo : string;
    procedure seleccionarGasto;
    function primerDia(fecha: TDateTime): TDateTime;
    procedure filtrarPagos;
  public
    procedure entrar(DS: TSQLClientDataSet);
  end;

var
  frmPagoGastosEmpresa: TfrmPagoGastosEmpresa;

implementation

uses MDatos, Recursos, Calendario, resumenGastos;

{$R *.dfm}

procedure TfrmPagoGastosEmpresa.seleccionarGasto;
begin
  cds.Close;
  cds.Params[0].AsInteger := Datos.cGastoEmpresaID_GASTO.AsInteger;
  cds.Open;
end;

procedure TfrmPagoGastosEmpresa.sGastoEmpresaDataChange(Sender: TObject;
  Field: TField);
begin
  seleccionarGasto;
end;

procedure TfrmPagoGastosEmpresa.grdGastosEmpresaEnter(Sender: TObject);
begin
  nvgGasto.DataSource := TDBGrid(Sender).DataSource;
  confoco(sender);
end;

procedure TfrmPagoGastosEmpresa.grdGastosEmpresaExit(Sender: TObject);
begin
  sinfoco(Sender);
end;

procedure TfrmPagoGastosEmpresa.entrar(DS: TSQLClientDataSet);
begin
  cds := DS;
  if (cds.Name = 'cPagoGastoObra') then
  begin
    cds.Params [1].AsInteger := Datos.cObraID_OBRA.AsInteger;
    caption := 'Gastos de Obra - Pagos Efectuados';
    tipo := 'obra';
  end
  else
  begin
    caption := 'Gastos Empresa - Pagos Efectuados';
    tipo := 'empresa';
  end;
  Datos.cGastoEmpresa.Open;
  sPagoGastoEmpresa.DataSet := cds;
  seleccionarGasto;
  sGastoEmpresaStateChange(nil);
  lblFechaIni.Caption := DateToStr(primerDia(IncMonth(Date,-6)));
  lblFechaFin.Caption := DateToStr(primerDia(IncMonth(Date,1)));
  filtrarPagos;
  ShowModal;
end;

procedure TfrmPagoGastosEmpresa.btnGrabarClick(Sender: TObject);
var
  TD: TTransactionDesc;
begin
  TD.TransactionID := 3;
  TD.IsolationLevel := xilREADCOMMITTED;
  Datos.Con.StartTransaction(TD);
  if (Datos.cGastoEmpresa.State in [dsInsert, dsEdit]) then
    Datos.cGastoEmpresa.Post;
  if (Datos.cGastoEmpresa.ChangeCount > 0) then
    if (Datos.cGastoEmpresa.ApplyUpdates(0) <> 0) then
    begin
      Application.MessageBox('Error al grabar en tabla Gastos Empresa', 'Error', mb_Ok+mb_IconError);
      Datos.Con.Rollback(TD);
      Abort;
    end;
  if (cds.State in [dsInsert, dsEdit]) then
    cds.Post;
  if (cds.ChangeCount > 0) then
    if (cds.ApplyUpdates(0) <> 0) then
    begin
      Application.MessageBox('Error al grabar en tabla Pagos Gastos Empresa', 'Error', mb_Ok+mb_IconError);
      Datos.Con.Rollback(TD);
      Abort;
    end;
  Datos.Con.Commit(TD);
  sGastoEmpresaStateChange(Sender);
end;

procedure TfrmPagoGastosEmpresa.sGastoEmpresaStateChange(Sender: TObject);
begin
  if not (Datos.cGastoEmpresa.State in [dsInactive]) then
    btnGrabar.Enabled := (Datos.cGastoEmpresa.ChangeCount > 0)
    or (cds.ChangeCount > 0);
end;

procedure TfrmPagoGastosEmpresa.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := Datos.AntesdeCerrar(Datos.cGastoEmpresa);
  if CanClose then
    CanClose := Datos.AntesdeCerrar(cds);
end;

procedure TfrmPagoGastosEmpresa.FormCreate(Sender: TObject);
begin
  Acomodo(frmPagoGastosEmpresa);
end;

procedure TfrmPagoGastosEmpresa.grdPagoGastoEmpresaEditButtonClick(
  Sender: TObject);
begin
  if (cds.FieldByName('FECHA').IsNull) then
    frmCalendario.Dia := Date
  else
    frmCalendario.Dia := cds.FieldByName('FECHA').AsDateTime;
  if frmCalendario.ShowModal = mrYes then
  begin
    cds.Edit;
    cds.FieldByName('FECHA').AsDateTime := frmCalendario.Dia;
  end;
end;

function TfrmPagoGastosEmpresa.primerDia(fecha: TDateTime): TDateTime;
var
  dia, mes, ano : word;
begin
  DecodeDate(fecha, ano,mes,dia);
  primerDia := EncodeDate(ano,mes,1);
end;

procedure TfrmPagoGastosEmpresa.btnCalOpeIniClick(Sender: TObject);
begin
  if (lblFechaIni.Caption = '') then
    frmCalendario.Dia := Date
  else
    frmCalendario.Dia := StrToDate(lblFechaIni.Caption);
  if frmCalendario.ShowModal = mrYes then
  begin
    lblFechaIni.Caption := DateToStr(frmCalendario.Dia);
    filtrarPagos;
  end;
end;

procedure TfrmPagoGastosEmpresa.filtrarPagos;
begin
  if not ((Datos.cGastoEmpresa.State in [dsInactive]) or
  (cds.State in [dsInactive])) then
  begin
    cds.Filtered := False;
    if (lblFechaIni.Caption <> '') and (lblFechaFin.Caption <> '')then
    begin
      cds.Filter := '(fecha >= '''+ lblFechaIni.Caption+''') and (fecha < '''
      +lblFechaFin.Caption+''')';
      cds.Filtered := True;
    end
    else if (lblFechaIni.Caption <> '') then
    begin
      cds.Filter := '(fecha >= '''+ lblFechaIni.Caption+''')';
      cds.Filtered := True;
    end
    else if (lblFechaFin.Caption <> '')then
    begin
      cds.Filter := '(fecha < '''+lblFechaFin.Caption+''')';
      cds.Filtered := True;
    end;
    cds.Refresh;
    btnFiltrado.Enabled := cds.Filtered;
  end;
end;

procedure TfrmPagoGastosEmpresa.btnCalOpeFinClick(Sender: TObject);
begin

  if (lblFechaFin.Caption = '') then
    frmCalendario.Dia := Date
  else
    frmCalendario.Dia := StrToDate(lblFechaFin.Caption);
  if frmCalendario.ShowModal = mrYes then
  begin
    lblFechaFin.Caption := DateToStr(frmCalendario.Dia);
    filtrarPagos;
  end;
end;

procedure TfrmPagoGastosEmpresa.btnFiltradoClick(Sender: TObject);
begin
  lblFechaIni.Caption := '';
  lblFechaFin.Caption := '';
  filtrarPagos;
end;

procedure TfrmPagoGastosEmpresa.nvgGastoClick(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button in [nbDelete] then
    sGastoEmpresaStateChange(Sender)
  else if (Button in [nbPost]) then
  begin
    if nvgGasto.DataSource = self.sGastoEmpresa then
    begin
      TStringGrid(self.grdGastosEmpresa).Col := 1;
      self.grdGastosEmpresa.SetFocus;
    end
    else
    begin
      TStringGrid(self.grdPagoGastoEmpresa).Col := 1;
      self.grdPagoGastoEmpresa.SetFocus;
    end;
  end;
end;

procedure TfrmPagoGastosEmpresa.Image1Click(Sender: TObject);
begin
  frmResumenGastos.entrar(tipo); 
end;

procedure TfrmPagoGastosEmpresa.grdGastosEmpresaKeyPress(Sender: TObject;
  var Key: Char);
begin
  Key := upcase(key);
end;

procedure TfrmPagoGastosEmpresa.edtBuscarChange(Sender: TObject);
begin
  self.btnBuscar.Enabled := (self.edtBuscar.Text <> '');
  self.btnBorrarBuscar.Enabled := self.btnBuscar.Enabled;
end;

procedure TfrmPagoGastosEmpresa.btnBorrarBuscarClick(Sender: TObject);
begin
  self.edtBuscar.Text := '';
  Datos.cGastoEmpresa.Filtered := False;
  self.edtBuscar.SetFocus;
end;

procedure TfrmPagoGastosEmpresa.btnBuscarClick(Sender: TObject);
begin
  Datos.cGastoEmpresa.Filtered := False;
  Datos.cGastoEmpresa.Filter := 'GASTO like ''%'+self.edtBuscar.Text+'%''';
  Datos.cGastoEmpresa.Filtered := True;
end;

end.
